﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

using Controller;
using System.Collections;
using Interfaces;

namespace GUI
{
    public partial class FrmOpret : Form
    {
        private Produktionssystem produktionssystem;

        private int tilstand;

        private const int STARTTILSTAND = 1;
        private const int OPRETTILSTANDRAAVARE = 2;
        private const int OPRETTILSTANDFAERDIGVARE = 3;
        private const int SLETTILSTANDRAAVARE = 4;
        private const int SLETTILSTANDFAERDIGVARE = 5;
        private const int REDIGERTILSTANDRAAVARE = 6;
        private const int REDIGERTILSTANFAERDIGVARE = 7;
        private const int RAAVARETILSTAND = 8;
        private const int FAERDIGVARETILSTAND = 9;



        public FrmOpret(Produktionssystem produktionssystem)
        {
            produktionssystem = new Produktionssystem();
            InitializeComponent();
            this.produktionssystem = produktionssystem;
            produktionssystem.fyldVareCol(true, true);
        }

         #region TILSTANDE
        public void starttilstand()
        {
            tilstand = STARTTILSTAND;

            //Knapper
            btnOpretRåvare.Enabled = true;
            btnOpretFærdigvare.Enabled = true;
            btnOpret.Enabled = false;
            btnFortryd.Enabled = false;
            btnSlet.Enabled = false;
            btnRediger.Enabled = false;
            btnOpretTilstand.Enabled = false;
            btnRedigerTilstand.Enabled = false;
            btnSletTilstand.Enabled = false;
            btnFortrydTilstand.Enabled = false;
            btnOpretTilstand2.Enabled = false;
            btnRedigerTilstand2.Enabled = false;
            btnSletTilstand2.Enabled = false;

            btnOpretTilstand.Show();
            btnRedigerTilstand.Show();
            btnSletTilstand.Show();

            btnOpretTilstand2.Show();
            btnRedigerTilstand2.Show();
            btnSletTilstand2.Show();

            //Tekst-bokse
            txtRåvarenr.ReadOnly = true;
            txtBetegnelse.ReadOnly = true;
            txtKilo.ReadOnly = true;
            txtKilopris.ReadOnly = true;
            txtLocation.ReadOnly = true;
            txtMinBeholdning.ReadOnly = true;
            txtVarenr.ReadOnly = true;

            //Combo-bokse
            cboRåvareNr.Enabled = false;
            cboFardigVare.Enabled = false;
        }

        private void oprettilstandraavare()
        {
            
                tilstand = OPRETTILSTANDRAAVARE;

                //Knapper
                btnOpretRåvare.Enabled = false;
                btnOpretFærdigvare.Enabled = false;
                btnOpret.Enabled = true;
                btnFortryd.Enabled = true;
                btnSlet.Enabled = false;
                btnRediger.Enabled = false;
                btnOpretTilstand.Enabled = false;
                btnRedigerTilstand.Enabled = false;
                btnSletTilstand.Enabled = false;
                btnFortrydTilstand.Enabled = false;
                btnOpretTilstand2.Enabled = false;
                btnRedigerTilstand2.Enabled = false;
                btnSletTilstand2.Enabled = false;

                //Færdigvare-knapper skjules!
                btnOpretTilstand2.Hide();
                btnRedigerTilstand2.Hide();
                btnSletTilstand2.Hide();

                //Råvare-knapper vises!
                btnOpretTilstand.Show();
                btnRedigerTilstand.Show();
                btnSletTilstand.Show();


                //Tekst-bokse
                txtRåvarenr.ReadOnly = false;
                txtBetegnelse.ReadOnly = false;
                txtKilo.ReadOnly = false;
                txtKilopris.ReadOnly = true;
                txtLocation.ReadOnly = false;
                txtMinBeholdning.ReadOnly = false;
                txtVarenr.ReadOnly = true;

                //Combo-bokse
                cboRåvareNr.Enabled = false;
                cboFardigVare.Enabled = false;

                txtRåvarenr.Focus();
            }

        private void oprettilstandfaerdigvare()
            {
                tilstand = OPRETTILSTANDFAERDIGVARE;

                //Knapper
                btnOpretRåvare.Enabled = false;
                btnOpretFærdigvare.Enabled = false;
                btnOpret.Enabled = true;
                btnFortryd.Enabled = true;
                btnSlet.Enabled = false;
                btnRediger.Enabled = false;
                btnOpretTilstand.Enabled = false;
                btnFortrydTilstand.Enabled = false;
                btnOpretTilstand2.Enabled = false;
                btnRedigerTilstand2.Enabled = false;
                btnSletTilstand2.Enabled = false;

                //Råvare-knapper skjules!
                btnOpretTilstand.Hide();
                btnRedigerTilstand.Hide();
                btnSletTilstand.Hide();

                //Færdigvare-knapper Vises!
                btnOpretTilstand2.Show();
                btnRedigerTilstand2.Show();
                btnSletTilstand2.Show();

                //Tekst-bokse
                txtRåvarenr.ReadOnly = true;
                txtBetegnelse.ReadOnly = false;
                txtKilo.ReadOnly = false;
                txtKilopris.ReadOnly = false;
                txtLocation.ReadOnly = false;
                txtMinBeholdning.ReadOnly = true;
                txtVarenr.ReadOnly = false;

                //Combo-bokse
                cboRåvareNr.Enabled = true;
                cboFardigVare.Enabled = false;

                txtBetegnelse.Focus();
            }


        private void slettilstandRaavare()
        {
            tilstand = SLETTILSTANDRAAVARE;

            //Knapper
            btnOpretRåvare.Enabled = false;
            btnOpretFærdigvare.Enabled = false;
            btnOpret.Enabled = false;
            btnFortryd.Enabled = true;
            btnSlet.Enabled = true;
            btnRediger.Enabled = false;
            btnOpretTilstand.Enabled = false;
            btnRedigerTilstand.Enabled = false;
            btnSletTilstand.Enabled = false;
            btnFortrydTilstand.Enabled = false;

            //Færdigvare-knapper skjules!
            btnOpretTilstand2.Hide();
            btnRedigerTilstand2.Hide();
            btnSletTilstand2.Hide();

            //Tekst-bokse
            txtRåvarenr.ReadOnly = true;
            txtBetegnelse.ReadOnly = true;
            txtKilo.ReadOnly = true;
            txtKilopris.ReadOnly = true;
            txtLocation.ReadOnly = true;
            txtMinBeholdning.ReadOnly = true;
            txtVarenr.ReadOnly = true;

            //Combo-bokse
            cboRåvareNr.Enabled = true;
            cboFardigVare.Enabled = false;
            }

            private void slettilstandfaerdigvare()
            {
                tilstand = SLETTILSTANDFAERDIGVARE;

                //Knapper
                btnOpretRåvare.Enabled = false;
                btnOpretFærdigvare.Enabled = false;
                btnOpret.Enabled = false;
                btnFortryd.Enabled = true;
                btnSlet.Enabled = true;
                btnRediger.Enabled = false;
                btnOpretTilstand2.Enabled = false;
                btnRedigerTilstand2.Enabled = false;
                btnSletTilstand2.Enabled = false;
                btnFortrydTilstand.Enabled = false;

                //Råvare-knapper skjules!
                btnOpretTilstand.Hide();
                btnRedigerTilstand.Hide();
                btnSletTilstand.Hide();

                //Tekst-bokse
                txtRåvarenr.ReadOnly = true;
                txtBetegnelse.ReadOnly = true;
                txtKilo.ReadOnly = true;
                txtKilopris.ReadOnly = true;
                txtLocation.ReadOnly = true;
                txtMinBeholdning.ReadOnly = true;
                txtVarenr.ReadOnly = true;

                //Combo-bokse
                cboRåvareNr.Enabled = false;
                cboFardigVare.Enabled = true;
            }

        private void redigertilstandraavare()
            {
                tilstand = REDIGERTILSTANDRAAVARE;

                //Knapper
                btnOpretRåvare.Enabled = false;
                btnOpretFærdigvare.Enabled = false;
                btnOpret.Enabled = false;
                btnFortryd.Enabled = true;
                btnSlet.Enabled = false;
                btnRediger.Enabled = true;
                btnOpretTilstand.Enabled = false;
                btnRedigerTilstand.Enabled = false;
                btnSletTilstand.Enabled = false;
                btnFortrydTilstand.Enabled = false;

                //Færdigvare-knapper skjules!
                btnOpretTilstand2.Hide();
                btnRedigerTilstand2.Hide();
                btnSletTilstand2.Hide();

                //Tekst-bokse
                txtRåvarenr.ReadOnly = false;
                txtBetegnelse.ReadOnly = false;
                txtKilo.ReadOnly = false;
                txtKilopris.ReadOnly = true;
                txtLocation.ReadOnly = false;
                txtMinBeholdning.ReadOnly = false;
                txtVarenr.ReadOnly = true;

                //Combo-bokse
                cboRåvareNr.Enabled = true;
                cboFardigVare.Enabled = false;
            }

             private void redigertilstandfaerdigvare()
            {
                tilstand = REDIGERTILSTANFAERDIGVARE;
                //Knapper
                btnOpretRåvare.Enabled = false;
                btnOpretFærdigvare.Enabled = false;
                btnOpret.Enabled = false;
                btnFortryd.Enabled = true;
                btnSlet.Enabled = false;
                btnRediger.Enabled = true;
                btnOpretTilstand2.Enabled = false;
                btnRedigerTilstand2.Enabled = false;
                btnSletTilstand2.Enabled = false;
                btnFortrydTilstand.Enabled = false;

                //Råvare-knapper skjules!
                btnOpretTilstand.Hide();
                btnRedigerTilstand.Hide();
                btnSletTilstand.Hide();

                //Tekst-bokse
                txtRåvarenr.ReadOnly = true;
                txtBetegnelse.ReadOnly = false;
                txtKilo.ReadOnly = false;
                txtKilopris.ReadOnly = false;
                txtLocation.ReadOnly = false;
                txtMinBeholdning.ReadOnly = true;
                txtVarenr.ReadOnly = false;

                //Combo-bokse
                cboRåvareNr.Enabled = false;
                cboFardigVare.Enabled = true;
            }

             private void raavaretilstand()
             {
                 tilstand = RAAVARETILSTAND;

                 //Knapper
                 btnOpretRåvare.Enabled = false;
                 btnOpretFærdigvare.Enabled = false;
                 btnOpret.Enabled = false;
                 btnFortryd.Enabled = false;
                 btnSlet.Enabled = false;
                 btnRediger.Enabled = false;
                 btnOpretTilstand.Enabled = true;
                 btnRedigerTilstand.Enabled = true;
                 btnSletTilstand.Enabled = true;
                 btnFortrydTilstand.Enabled = true;
                 btnOpretTilstand2.Enabled = false;
                 btnRedigerTilstand2.Enabled = false;
                 btnSletTilstand2.Enabled = false;

                 //Færdigvare-knapper skjules!
                 btnOpretTilstand2.Hide();
                 btnRedigerTilstand2.Hide();
                 btnSletTilstand2.Hide();

                 //Tekst-bokse
                 txtRåvarenr.ReadOnly = true;
                 txtBetegnelse.ReadOnly = true;
                 txtKilo.ReadOnly = true;
                 txtKilopris.ReadOnly = true;
                 txtLocation.ReadOnly = true;
                 txtMinBeholdning.ReadOnly = true;
                 txtVarenr.ReadOnly = true;

                 //Combo-bokse
                 cboRåvareNr.Enabled = false;
                 cboFardigVare.Enabled = false;
             }

             private void faerdigvaretilstand()
             {
                 tilstand = FAERDIGVARETILSTAND;
                 //Knapper
                 btnOpretRåvare.Enabled = false;
                 btnOpretFærdigvare.Enabled = false;
                 btnOpret.Enabled = false;
                 btnFortryd.Enabled = false;
                 btnSlet.Enabled = false;
                 btnRediger.Enabled = false;
                 btnOpretTilstand.Enabled = false;
                 btnRedigerTilstand.Enabled = false;
                 btnSletTilstand.Enabled = false;
                 btnFortrydTilstand.Enabled = true;
                 btnOpretTilstand2.Enabled = true;
                 btnRedigerTilstand2.Enabled = true;
                 btnSletTilstand2.Enabled = true;

                 //Råvare-knapper skjules!
                 btnOpretTilstand.Hide();
                 btnRedigerTilstand.Hide();
                 btnSletTilstand.Hide();

                 //Tekst-bokse
                 txtRåvarenr.ReadOnly = true;
                 txtBetegnelse.ReadOnly = true;
                 txtKilo.ReadOnly = true;
                 txtKilopris.ReadOnly = true;
                 txtLocation.ReadOnly = true;
                 txtMinBeholdning.ReadOnly = true;
                 txtVarenr.ReadOnly = true;

                 //Combo-bokse
                 cboRåvareNr.Enabled = false;
                 cboFardigVare.Enabled = false;
             }

         # endregion

        private void btnOpretFærdigvare_Click(object sender, EventArgs e)
        {
            faerdigvaretilstand();
        }
             

        private void clear_felter()
        {
            txtRåvarenr.Clear();
            txtBetegnelse.Clear();
            txtKilo.Clear();
            txtKilopris.Clear();
            txtMinBeholdning.Clear();
            txtLocation.Clear();
            txtVarenr.Clear();
            cboRåvareNr.SelectedIndex = -1;
            cboFardigVare.SelectedIndex = -1;
        }


        private void FrmOpret_Load(object sender, EventArgs e)
        {
            OpdaterCombobox();
        }

        public void tilstandOpret(int værdi)
        {
            if (værdi == 1)
            {
                raavaretilstand();
            }
            else if (værdi == 2)
            {
                faerdigvaretilstand();
            }
        }

        //JESPER - ComboBox
        public void OpdaterCombobox()
        {
            produktionssystem.IndlaesRaavarer();
            cboRåvareNr.Items.Clear();

            for (int i = 0; i < produktionssystem.AntalRaaVareIVareCol(); i++)
            {
                cboRåvareNr.Items.Add(produktionssystem.FindRaavarenumre(i).ToString() + " - " + produktionssystem.FindRaaVareBetegnelse(i));
            }
        }

        public void OpdaterCombobox2()
        {
            produktionssystem.IndlaesFaerdigvare();
            cboFardigVare.Items.Clear();

            for (int i = 0; i < produktionssystem.AntalFaerdigVareIVareCol(); i++)
            {
                cboFardigVare.Items.Add(produktionssystem.FindFaerdigvarenumre(i).ToString() + " - " + produktionssystem.FindFaerdigVareBetegnelse(i));
            }
        }


        private void btnOpretRåvare_Click(object sender, EventArgs e)
        {
            OpdaterCombobox();
            OpdaterCombobox2();
        }


        private void btnOpret_Click(object sender, EventArgs e)
        {
            OpdaterCombobox();
            OpdaterCombobox2();
        }

        private void FrmOpret_Load_1(object sender, EventArgs e)
        {
            OpdaterCombobox();
            OpdaterCombobox2();
            clear_felter();
        }

        private void btnSletTilstand_Click(object sender, EventArgs e)
        {
            OpdaterCombobox();
            OpdaterCombobox2();
            
            slettilstandRaavare();
        }

        private void btnRedigerTilstand_Click(object sender, EventArgs e)
        {
            OpdaterCombobox();
            OpdaterCombobox2();
            redigertilstandraavare();
        }

        private void btnFortrydTilstand_Click(object sender, EventArgs e)
        {
            faerdigvaretilstand();
        }

        private void btnOpretTilstand_Click(object sender, EventArgs e)
        {
            oprettilstandraavare();
        }

        private void btnOpretTilstand2_Click(object sender, EventArgs e)
        {
            oprettilstandfaerdigvare();
        }

        private void btnOpretTilstand2_Click_1(object sender, EventArgs e)
        {
            oprettilstandfaerdigvare();
        }

        private void btnOpretRåvare_Click_1(object sender, EventArgs e)
        {
            raavaretilstand();
        }

        private void btnOpretTilstand_Click_1(object sender, EventArgs e)
        {
            oprettilstandraavare();
        }

        private void btnRedigerTilstand_Click_1(object sender, EventArgs e)
        {
            redigertilstandraavare();
        }

        private void btnSletTilstand_Click_1(object sender, EventArgs e)
        {
            slettilstandRaavare();
        }

        private void btnRedigerTilstand2_Click(object sender, EventArgs e)
        {
            redigertilstandfaerdigvare();
        }

        private void btnSletTilstand2_Click(object sender, EventArgs e)
        {
            slettilstandfaerdigvare();
        }

        private void btnFortrydTilstand_Click_1(object sender, EventArgs e)
        {
            starttilstand();
        }

        private void FrmOpret_Load_2(object sender, EventArgs e)
        {
            OpdaterCombobox();
            OpdaterCombobox2();
        }


        //JESPER - SLET RÅVARE
        private void btnSlet_Click_1(object sender, EventArgs e)
        {
            if (tilstand == SLETTILSTANDRAAVARE)
            {
                DialogResult res = MessageBox.Show("Er du sikker på, at du vil slette Råvaren?",
                                    "Vil du slette?",
                                    MessageBoxButtons.YesNo,
                                    MessageBoxIcon.Warning);

                if (res == DialogResult.Yes)
                {
                    int raavareNr = produktionssystem.FindRaavarenumre(cboRåvareNr.SelectedIndex);

                    if (produktionssystem.SletVare(raavareNr) == false)
                    {
                        MessageBox.Show("Varen kunne desværre ikke fjernes", "Systemfejl", MessageBoxButtons.OK, MessageBoxIcon.Error);
                        return;
                    }

                    int idx = cboRåvareNr.SelectedIndex;     //Finder valgte index i comboboxen!
                    cboRåvareNr.Items.RemoveAt(idx);     //Fjerner element fra comboboxen!

                    if (tilstand == OPRETTILSTANDRAAVARE || tilstand == REDIGERTILSTANDRAAVARE || tilstand == SLETTILSTANDRAAVARE)
                    {
                        raavaretilstand();
                    }
                    else if (tilstand == OPRETTILSTANDFAERDIGVARE || tilstand == REDIGERTILSTANFAERDIGVARE || tilstand == SLETTILSTANDFAERDIGVARE)
                    {
                        faerdigvaretilstand();
                    } 
                }
            }
           
        }

        private void btnFortryd_Click_1(object sender, EventArgs e)
        {
            if (tilstand == OPRETTILSTANDRAAVARE || tilstand == REDIGERTILSTANDRAAVARE || tilstand == SLETTILSTANDRAAVARE)
            {
                raavaretilstand();
                clear_felter();
            }
            else if (tilstand == OPRETTILSTANDFAERDIGVARE || tilstand == REDIGERTILSTANFAERDIGVARE || tilstand == SLETTILSTANDFAERDIGVARE)
            {
                faerdigvaretilstand();
                clear_felter();
            }
        }

        //Opretter Råvare og Færdigvare
        private void btnOpret_Click_3(object sender, EventArgs e)
        {
              bool res;
            int raavarenr;
            string betegnelse;
            double kilo;
            string location;
            double minbeholdning = 0;
            double indkoebspris = 0;
            int varenr = 0;


            //Indlæs råvarenr
            if (tilstand == OPRETTILSTANDFAERDIGVARE)
            {
                string test = (string)cboRåvareNr.SelectedItem;
                


                raavarenr = produktionssystem.FindRaavarenumre(cboRåvareNr.SelectedIndex);
                // return;
            }
            else
            {

                res = int.TryParse(txtRåvarenr.Text, out raavarenr);
                if (!res)
                {
                    MessageBox.Show("Indtast venligst råvarenr i heltal");
                    txtRåvarenr.Focus();
                    return;
                }
            }

            //JESPER - Tjekker om råvarenummeret eksistere i forvejen!
            if (tilstand == OPRETTILSTANDRAAVARE)
            {
                IRåvaredata raavaredata;
                IEnumerator raavareIterator = produktionssystem.GetRaavareEnumerator();
                raavareIterator.Reset();
                while (raavareIterator.MoveNext())
                {
                    raavaredata = (IRåvaredata)raavareIterator.Current;

                    if (raavaredata.VARENR == raavarenr)
                    {
                        MessageBox.Show("Råvarenummeret eksistere i forvejen. Skriv venligst et nyt!");
                        txtRåvarenr.Clear();
                        txtRåvarenr.Focus();
                        return;
                    }
                }
            }

            //Indlæs betegnelse
            betegnelse = txtBetegnelse.Text;
            if (betegnelse == "")
            {
                MessageBox.Show("Indtast venligst en betegnelse");
                txtBetegnelse.Focus();
                return;
            }

            //Indlæs Kilo
            res = double.TryParse(txtKilo.Text, out kilo);
            if (!res)
            {
                MessageBox.Show("Indtast venligst kilo");
                txtKilo.Focus();
                return;
            }

            //Indlæs Location
            location = txtLocation.Text;
            if (location == "")
            {
                MessageBox.Show("Indtast venligst location");
                txtLocation.Focus();
                return;
            }

            //Indlæs minimumsbeholdning
            if (tilstand == OPRETTILSTANDRAAVARE)
            {
                res = double.TryParse(txtMinBeholdning.Text, out minbeholdning);
                if (!res)
                {
                    MessageBox.Show("Indtast venligst en minimumsbeholdning");
                    txtMinBeholdning.Focus();
                    return;
                }
            }

            //Indlæs Indkøbspris
            if (tilstand == OPRETTILSTANDFAERDIGVARE)
            {
                res = double.TryParse(txtKilopris.Text, out indkoebspris);
                if (!res)
                {
                    MessageBox.Show("Indtast venligst en indkøbspris");
                    txtKilopris.Focus();
                    return;
                }
            }


            //Indlæs Varenr
            if (tilstand == OPRETTILSTANDFAERDIGVARE)
            {
                res = int.TryParse(txtVarenr.Text, out varenr);
                if (!res)
                {
                    MessageBox.Show("Indtast venligst varenr i heltal");
                    txtVarenr.Focus();
                    return;
                }
            }

            if (tilstand == OPRETTILSTANDFAERDIGVARE)
            {
                bool faerdigvaredata = produktionssystem.EksistererFaerdigvare(varenr);

                if (faerdigvaredata == true)
                {
                    MessageBox.Show("Varenummeret eksistere i forvejen. Skriv venligst et nyt!");
                    txtVarenr.Clear();
                    txtVarenr.Focus();
                    return;
                }

            }

            if (tilstand == OPRETTILSTANDRAAVARE)
            {
                produktionssystem.TilføjRaavare(raavarenr, betegnelse, kilo, location, minbeholdning);
            }

            if (tilstand == OPRETTILSTANDFAERDIGVARE)
            {
                produktionssystem.TilfoejFaerdigvare(varenr, betegnelse, kilo, indkoebspris, location, raavarenr);
            }


            if (tilstand == OPRETTILSTANDRAAVARE || tilstand == REDIGERTILSTANDRAAVARE || tilstand == SLETTILSTANDRAAVARE)
            {
                raavaretilstand();
            }
            else if (tilstand == OPRETTILSTANDFAERDIGVARE || tilstand == REDIGERTILSTANFAERDIGVARE || tilstand == SLETTILSTANDFAERDIGVARE)
            {
                faerdigvaretilstand();
            }


            clear_felter();
            OpdaterCombobox();
            OpdaterCombobox2();
        }
        }
    }
